home *** CD-ROM | disk | FTP | other *** search
/ X User Tools / X User Tools (O'Reilly and Associates)(1994).ISO / sun4c / archive / tcltk.z / tcltk / slib / tk / demos / mkCanvText.tcl < prev    next >
Text File  |  1994-09-20  |  4KB  |  111 lines

  1. # mkCanvText w
  2. #
  3. # Create a top-level window containing a canvas displaying a text
  4. # string and allowing the string to be edited and re-anchored.
  5. #
  6. # Arguments:
  7. #    w -    Name to use for new top-level window.
  8.  
  9. proc mkCanvText {{w .ctext}} {
  10.     catch {destroy $w}
  11.     toplevel $w
  12.     dpos $w
  13.     wm title $w "Canvas Text Demonstration"
  14.     wm iconname $w "Text"
  15.     set c $w.c
  16.  
  17.     message $w.msg -font -Adobe-Times-Medium-R-Normal-*-180-* -width 420 \
  18.         -relief raised -bd 2 -text "This window displays a string of text to demonstrate the text facilities of canvas widgets.  You can point, click, and type.  You can also select and then delete with Control-d.  You can copy the selection with Control-v.  You can click in the boxes to adjust the position of the text relative to its positioning point or change its justification."
  19.     canvas $c -relief raised -width 500 -height 400
  20.     button $w.ok -text "OK" -command "destroy $w"
  21.     pack $w.msg -side top -fill both
  22.     pack $w.c -side top -expand yes -fill both
  23.     pack $w.ok -side bottom -pady 5 -anchor center
  24.  
  25.     set font -Adobe-helvetica-medium-r-*-240-*
  26.  
  27.     $c create rectangle 245 195 255 205 -outline black -fill red
  28.  
  29.     # First, create the text item and give it bindings so it can be edited.
  30.     
  31.     $c addtag text withtag [$c create text 250 200 -text "This is just a string of text to demonstrate the text facilities of canvas widgets. You can point, click, and type.  You can also select and then delete with Control-d." -width 440 -anchor n -font $font -justify left]
  32.     $c bind text <1> "textB1Press $c %x %y"
  33.     $c bind text <B1-Motion> "textB1Move $c %x %y"
  34.     $c bind text <Shift-1> "$c select adjust current @%x,%y"
  35.     $c bind text <Shift-B1-Motion> "textB1Move $c %x %y"
  36.     $c bind text <KeyPress> "$c insert text insert %A"
  37.     $c bind text <Shift-KeyPress> "$c insert text insert %A"
  38.     $c bind text <Return> "$c insert text insert \\n"
  39.     $c bind text <Control-h> "textBs $c"
  40.     $c bind text <Delete> "textBs $c"
  41.     $c bind text <Control-d> "$c dchars text sel.first sel.last"
  42.     $c bind text <Control-v> "$c insert text insert \[selection get\]"
  43.  
  44.     # Next, create some items that allow the text's anchor position
  45.     # to be edited.
  46.  
  47.     set x 50
  48.     set y 50
  49.     set color LightSkyBlue1
  50.     mkTextConfig $c $x $y -anchor se $color
  51.     mkTextConfig $c [expr $x+30] [expr $y] -anchor s $color
  52.     mkTextConfig $c [expr $x+60] [expr $y] -anchor sw $color
  53.     mkTextConfig $c [expr $x] [expr $y+30] -anchor e $color
  54.     mkTextConfig $c [expr $x+30] [expr $y+30] -anchor center $color
  55.     mkTextConfig $c [expr $x+60] [expr $y+30] -anchor w $color
  56.     mkTextConfig $c [expr $x] [expr $y+60] -anchor ne $color
  57.     mkTextConfig $c [expr $x+30] [expr $y+60] -anchor n $color
  58.     mkTextConfig $c [expr $x+60] [expr $y+60] -anchor nw $color
  59.     set item [$c create rect [expr $x+40] [expr $y+40] [expr $x+50] [expr $y+50] \
  60.         -outline black -fill red]
  61.     $c bind $item <1> "$c itemconf text -anchor center"
  62.     $c create text [expr $x+45] [expr $y-5] -text {Text Position} -anchor s \
  63.         -font -Adobe-times-medium-r-normal--*-240-* -fill brown
  64.  
  65.     # Lastly, create some items that allow the text's justification to be
  66.     # changed.
  67.     
  68.     set x 350
  69.     set y 50
  70.     set color SeaGreen2
  71.     mkTextConfig $c $x $y -justify left $color
  72.     mkTextConfig $c [expr $x+30] [expr $y] -justify center $color
  73.     mkTextConfig $c [expr $x+60] [expr $y] -justify right $color
  74.     $c create text [expr $x+45] [expr $y-5] -text {Justification} -anchor s \
  75.         -font -Adobe-times-medium-r-normal--*-240-* -fill brown
  76.  
  77.     $c bind config <Enter> "textEnter $c"
  78.     $c bind config <Leave> "$c itemconf current -fill \$textConfigFill"
  79. }
  80.  
  81. proc mkTextConfig {w x y option value color} {
  82.     set item [$w create rect [expr $x] [expr $y] [expr $x+30] [expr $y+30] \
  83.         -outline black -fill $color -width 1]
  84.     $w bind $item <1> "$w itemconf text $option $value"
  85.     $w addtag config withtag $item
  86. }
  87.  
  88. set textConfigFill {}
  89.  
  90. proc textEnter {w} {
  91.     global textConfigFill
  92.     set textConfigFill [lindex [$w itemconfig current -fill] 4]
  93.     $w itemconfig current -fill black
  94. }
  95.  
  96. proc textB1Press {w x y} {
  97.     $w icursor current @$x,$y
  98.     $w focus current
  99.     focus $w
  100.     $w select from current @$x,$y
  101. }
  102.  
  103. proc textB1Move {w x y} {
  104.     $w select to current @$x,$y
  105. }
  106.  
  107. proc textBs {w} {
  108.     set char [expr {[$w index text insert] - 1}]
  109.     if {$char >= 0} {$w dchar text $char}
  110. }
  111.